package controleur;


 

import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;




import org.jdesktop.beansbinding.AutoBinding;
import org.jdesktop.beansbinding.AutoBinding.UpdateStrategy;
import org.jdesktop.beansbinding.BeanProperty;
import org.jdesktop.beansbinding.ELProperty;
import org.jdesktop.swingbinding.JTableBinding;
import org.jdesktop.beansbinding.Bindings;
import org.jdesktop.swingbinding.SwingBindings;

import daos.DAOs;

import modele.Commande;
import modele.LigneCommande;
import modele.Produit;

import vue.Accueilbis;
import vue.PasserCommande;

public class PasserCommandeController {

	private Commande commande= new Commande();
	
	
	public Commande getCommande() {
		return commande;
	}

	public void setCommande(Commande commande) {
		this.commande = commande;
		passerCommande.getRecapt().setCommande(commande);
		passerCommande.getRecapt().setCmdctrl(this);
		//passerCommande.getHmctrl().getCommandes().addCommande(commande);
		//passerCommande.getHmctrl().getAccueil().getTableCommandes().repaint();
		
	}

	private PasserCommande passerCommande;
	public PasserCommande getPasserCommande() {
		return passerCommande;
	}

	public void setPasserCommande(PasserCommande passerCommande) {
		this.passerCommande = passerCommande;
	}

	
	
	public PasserCommandeController(PasserCommande passerCommande){
		this.passerCommande= passerCommande;
		validerCommande();
		checkbox();
		changeSpinner();
		initDataBindings();
	}
	
	public void validerCommande(){
		final PasserCommandeController essai=this;
		passerCommande.getBtnValider().addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				passerCommande.getMdp().setCommande(commande);
				passerCommande.getMdp().setCmdctrl(essai);
				//passerCommande.getRecapt().setCommande(commande);
				CardLayout c1= (CardLayout)(passerCommande.getContentPane()).getLayout();
				//c1.next(passerCommande.getContentPane());
				c1.show(passerCommande.getContentPane(), "name_12557505717604");
			}
		});
	}
	
	public void checkbox(){
		passerCommande.getChckbxCoca().addActionListener(new ChckbxCocaListener());
		passerCommande.getChckbxCake().addActionListener(new ChckbxCakeListener());
		passerCommande.getChckbxChicken().addActionListener(new ChckbxChickenListener());
		passerCommande.getChckbxChickenMditranne().addActionListener(new ChckbxChickenMditranneListener());
		passerCommande.getChckbxDoublecheese().addActionListener(new ChckbxDoubleCheeseListener());
		passerCommande.getChckbxFanta().addActionListener(new ChckbxFantaListener());
		passerCommande.getChckbxFrites().addActionListener(new ChckbxFritesListener());
		passerCommande.getChckbxSprite().addActionListener(new ChckbxSpriteListener());
		passerCommande.getChckbxTiramissu().addActionListener(new ChckbxTiramissuListener());
		}
	
	public void changeSpinner(){
		passerCommande.getSpinnerCoca().addChangeListener(new SpinnerCocaListener());
		passerCommande.getSpinnerCake().addChangeListener(new SpinnerCakeListener());
		passerCommande.getSpinnerChickenCurry().addChangeListener(new SpinnerChickenCurryListener());
		passerCommande.getSpinnerChickenMediter().addChangeListener(new SpinnerChickenMediterListener());
		passerCommande.getSpinnerDoubleCheese().addChangeListener(new SpinnerDoubleCheeseListener());
		passerCommande.getSpinnerFanta().addChangeListener(new SpinnerFantaListener());
		passerCommande.getSpinnerFrites().addChangeListener(new SpinnerFritesListener());
		passerCommande.getSpinnerSprite().addChangeListener(new SpinnerSpriteListener());
		passerCommande.getSpinnerTiramissu().addChangeListener(new SpinnerTiramissuListener());
		
	}
	
	public void storeCommande(Commande commande) {
		DAOs.getCommandeDAO().add(commande);
	}
	
	
	
	protected void initDataBindings() {

		
		
		BeanProperty<Commande, List<LigneCommande>> commandeBeanProperty = BeanProperty.create("lignesDeCommandes");
		JTableBinding<LigneCommande, Commande, JTable> jTableBinding = SwingBindings.createJTableBinding(UpdateStrategy.READ, commande, commandeBeanProperty, passerCommande.getTableCommande());
		//
		BeanProperty<LigneCommande, String> ligneCommandeBeanProperty = BeanProperty.create("produit.nom");
		jTableBinding.addColumnBinding(ligneCommandeBeanProperty).setColumnName("Nom").setEditable(false);
		//
		BeanProperty<LigneCommande, Double> ligneCommandeBeanProperty_1 = BeanProperty.create("produit.prix");
		jTableBinding.addColumnBinding(ligneCommandeBeanProperty_1).setColumnName("Prix unitaire").setEditable(false);
		//
		BeanProperty<LigneCommande, Integer> ligneCommandeBeanProperty_2 = BeanProperty.create("quantite");
		jTableBinding.addColumnBinding(ligneCommandeBeanProperty_2).setColumnName("Quantit\u00E9").setEditable(false);
		
		ELProperty<LigneCommande, Object> totalproperty=ELProperty.create("${produit.prix*quantite}");
		jTableBinding.addColumnBinding(totalproperty).setColumnName("Total").setEditable(false);
		//
		jTableBinding.setEditable(false);
		jTableBinding.bind();
		

	}
	
	class ValiderCommandeListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
//			passerCommande.getMdp().setCommande(commande);
//			passerCommande.getMdp().setCmdctrl(this);
//			passerCommande.getRecapt().setCommande(commande);
//			CardLayout c1= (CardLayout)(passerCommande.getContentPane()).getLayout();
//			//c1.next(passerCommande.getContentPane());
//			c1.show(passerCommande.getContentPane(), "name_12557505717604");
		}
		
	}
	class  ChckbxCocaListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			if(passerCommande.getChckbxCoca().isSelected())
				passerCommande.getSpinnerCoca().setValue(1);
			if(!passerCommande.getChckbxCoca().isSelected())
				passerCommande.getSpinnerCoca().setValue(0);
		}
		
	}
	

	

	 class ChckbxCakeListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			if(passerCommande.getChckbxCake().isSelected())
				passerCommande.getSpinnerCake().setValue(1);
			if(!passerCommande.getChckbxCake().isSelected())
				passerCommande.getSpinnerCake().setValue(0);

		}

	}
	

	public class ChckbxTiramissuListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if(passerCommande.getChckbxTiramissu().isSelected())
				passerCommande.getSpinnerTiramissu().setValue(1);
			if(!passerCommande.getChckbxTiramissu().isSelected())
				passerCommande.getSpinnerTiramissu().setValue(0);

		}

	}

	public class ChckbxSpriteListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if(passerCommande.getChckbxSprite().isSelected())
				passerCommande.getSpinnerSprite().setValue(1);
			if(!passerCommande.getChckbxSprite().isSelected())
				passerCommande.getSpinnerSprite().setValue(0);

		}

	}

	public class ChckbxFritesListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if(passerCommande.getChckbxFrites().isSelected())
				passerCommande.getSpinnerFrites().setValue(1);
			if(!passerCommande.getChckbxFrites().isSelected())
				passerCommande.getSpinnerFrites().setValue(0);

		}

	}

	public class ChckbxFantaListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if(passerCommande.getChckbxFanta().isSelected())
				passerCommande.getSpinnerFanta().setValue(1);
			if(!passerCommande.getChckbxFanta().isSelected())
				passerCommande.getSpinnerFanta().setValue(0);

		}

	}

	public class ChckbxDoubleCheeseListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if(passerCommande.getChckbxDoublecheese().isSelected())
				passerCommande.getSpinnerDoubleCheese().setValue(1);
			if(!passerCommande.getChckbxDoublecheese().isSelected())
				passerCommande.getSpinnerDoubleCheese().setValue(0);

		}

	}

	public class ChckbxChickenMditranneListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if(passerCommande.getChckbxChickenMditranne().isSelected())
				passerCommande.getSpinnerChickenMediter().setValue(1);
			if(!passerCommande.getChckbxChickenMditranne().isSelected())
				passerCommande.getSpinnerChickenMediter().setValue(0);

		}

	}

	public class ChckbxChickenListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			if(passerCommande.getChckbxChicken().isSelected())
				passerCommande.getSpinnerChickenCurry().setValue(1);
			if(!passerCommande.getChckbxChicken().isSelected())
				passerCommande.getSpinnerChickenCurry().setValue(0);

		}

	}


	class SpinnerCocaListener implements ChangeListener{

		@Override
		public void stateChanged(ChangeEvent e) {
			JSpinner spin=(JSpinner)e.getSource();
			Produit coca= new Produit("coca - cola");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxCoca().setSelected(true);
				commande.ajouterProduit(coca,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxCoca().setSelected(false);
				commande.enleverProduit(coca);
		}
		
	}
	}

	public class SpinnerTiramissuListener implements ChangeListener {

		@Override
		public void stateChanged(ChangeEvent e) {	
			JSpinner spin=(JSpinner)e.getSource();
			Produit tiramissu= new Produit("tiramissu");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxTiramissu().setSelected(true);
				commande.ajouterProduit(tiramissu,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxTiramissu().setSelected(false);
				commande.enleverProduit(tiramissu);
		}
		}

	}

	public class SpinnerSpriteListener implements ChangeListener {

		@Override
		public void stateChanged(ChangeEvent e) {
			JSpinner spin=(JSpinner)e.getSource();
			Produit sprite= new Produit("sprite");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxSprite().setSelected(true);
				commande.ajouterProduit(sprite,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxSprite().setSelected(false);
				commande.enleverProduit(sprite);
		}
		}

	}

	public class SpinnerFritesListener implements ChangeListener {

		@Override
		public void stateChanged(ChangeEvent e) {
			JSpinner spin=(JSpinner)e.getSource();
			Produit frites= new Produit("frites");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxFrites().setSelected(true);
				commande.ajouterProduit(frites,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxFrites().setSelected(false);
				commande.enleverProduit(frites);
		}
		}

	}

	public class SpinnerFantaListener implements ChangeListener {

		@Override
		public void stateChanged(ChangeEvent e) {
			JSpinner spin=(JSpinner)e.getSource();
			Produit fanta= new Produit("fanta");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxFanta().setSelected(true);
				commande.ajouterProduit(fanta,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxFanta().setSelected(false);
				commande.enleverProduit(fanta);
		}
		}

	}

	public class SpinnerDoubleCheeseListener implements ChangeListener {

		@Override
		public void stateChanged(ChangeEvent e) {
			JSpinner spin=(JSpinner)e.getSource();
			Produit doubleCheese= new Produit("doubleCheese");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxDoublecheese().setSelected(true);
				commande.ajouterProduit(doubleCheese,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxDoublecheese().setSelected(false);
				commande.enleverProduit(doubleCheese);
		}		}

	}

	public class SpinnerChickenMediterListener implements ChangeListener {

		@Override
		public void stateChanged(ChangeEvent e) {
			JSpinner spin=(JSpinner)e.getSource();
			Produit chickenMediter= new Produit("chickenMediter");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxChickenMditranne().setSelected(true);
				commande.ajouterProduit(chickenMediter,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxChickenMditranne().setSelected(false);
				commande.enleverProduit(chickenMediter);
		}		
			}

	}

	public class SpinnerChickenCurryListener implements ChangeListener {

		@Override
		public void stateChanged(ChangeEvent e) {
			JSpinner spin=(JSpinner)e.getSource();
			Produit chickenCurry= new Produit("chickenCurry");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxChicken().setSelected(true);
				commande.ajouterProduit(chickenCurry,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxChicken().setSelected(false);
				commande.enleverProduit(chickenCurry);
		}				}

	}

	public class SpinnerCakeListener implements ChangeListener {

		@Override
		public void stateChanged(ChangeEvent e) {
			JSpinner spin=(JSpinner)e.getSource();
			Produit cake= new Produit("cake");
			if ((Integer)spin.getValue()>0){
				passerCommande.getChckbxCake().setSelected(true);
				commande.ajouterProduit(cake,(Integer)spin.getValue());
				passerCommande.getTableCommande().repaint();
				}
			if ((Integer)spin.getValue()==0){
				passerCommande.getChckbxCake().setSelected(false);
				commande.enleverProduit(cake);
		}			
		}

	}
	


	
	
}
